package com.test.util;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;

public class OutInstance {

    public <T> List<T> list(Class<T> type, String[] names, Class<?>[] paramTypes, Object... params) {
        if (names == null || names.length == 0) {
            return null;
        }
        List<T> results = new ArrayList<>();
        for (String name : names) {
            try {
                Class<?> aClass = Class.forName(name);
                // paramTypes如果是一个长度为0的数组则表示获取默认无参构造函数
                Constructor<?> constructor = aClass.getConstructor(paramTypes);
                // 如果用户只传了前三个参数，后面没有其他参数，那么params是一个长度为0的数组
                T instance = (T)constructor.newInstance(params);
                results.add(instance);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
        return results;
    }


    public String print() {
        return "模拟一些操作";
    }
}
